AWS CloudFormtion スタックのステータスをポーリングし、完了(COMPLETE)となったら別のコマンドを自動実行させる小技
こんにちは、CX 事業本部 Delivery 部の若槻です。
AWS CloudFormtion でデプロイなどによりスタックの更新を行う際に、リソースの依存関係の解決の失敗などによってスタックの更新が失敗し、スタックが ROLLBACK_IN_PROGRESS
や UPDATE_COMPLETE_CLEANUP_IN_PROGRESS
などのステータスとなることがあります。
これらのステータスは CloudFormation による解消が行われ後に自動的に XXXX_COMPLETE
ステータスに遷移しますが、それまでに数分から数十分かかる場合があります。その間は当然そのスタックの更新は行えません。
スタックのステータスをポーリングできる wait コマンド
さて、私の場合は CloudFormation スタックの管理は AWS CDK で行うことがほとんどのなのですが、cdk deploy
コマンドなどの実行が失敗し、前述のようなステータスとなった際には作業の中断を余儀なくされてしまいます。
そこで活用したいのが、CloudFormation のスタックのステータスをポーリングできる wait
コマンドです。このコマンドを使うことにより、XXXX_IN_PROGRESS
というステータスの XXXX_COMPLETE
への遷移を待機することができます。
wait
コマンドには以下のサブコマンドがあり、ステータスの遷移先ごとに使い分けを行います。
- change-set-create-complete
- stack-create-complete
- stack-delete-complete
- stack-exists
- stack-import-complete
- stack-rollback-complete
- stack-update-complete
- type-registration-complete
例えば、次のように UPDATE_COMPLETE_CLEANUP_IN_PROGRESS
となったスタックのステータスが UPDATE_COMPLETE
に遷移したらすぐに再度 cdk deploy
コマンドを実行させたいとします。
その場合は wait stack-update-complete
コマンドに &&
で cdk deploy
コマンドを繋げることで、UPDATE_COMPLETE
に遷移後に自動で cdk deploy
コマンドが実行されるようになります。
aws cloudformation wait stack-update-complete --stack-name $STACK_ARN && cdk deploy
試してみると、wait
コマンドの後に cdk deploy
コマンドが実行されました。
$ aws cloudformation wait stack-update-complete --stack-name $STACK_ARN && cdk deploy --method=direct --require-approval never ✨ Synthesis time: 3.18s CdkSampleStack: deploying... [1/1] ✅ CdkSampleStack (no changes) ✨ Deployment time: 0.52s Stack ARN: arn:aws:cloudformation:ap-northeast-1:XXXXXXXXXXXX:stack/CdkSampleStack/64865330-32dd-11ee-966b-0ad98d96b631 ✨ Total time: 3.7s
これでコーヒーを飲んでいる間にスタックの IN_PROGRESS
状態の解消のチェックと、解消後の別のコマンドの実行を自動化することができ、作業者はコーヒーでも飲みながらゆっくりと待機することができるようになります。